For many purposes, including virus detection, digital rights protection, and asset management, it is essential to be able to identify software. Software will herein be construed in a wide sense including but not limited to any digital content such as computer code, Java applets, digitized music, digitized images and video, or digitized text and data. Identifying software may mean identifying the general Software group, e.g. Microsoft Word, or the particular version, e.g. Microsoft Word 11.2. Software to be identified may also be a subfunction of a larger Software, for example the spell-checker function of Microsoft Word.
There are many methods of identification such as by the filename as represented in the operating system of the computer, by internal strings in the Software, and by the size of the file on disk. Such methods however fail to work if the Software is changed at all, either for the purposes of deception or innocently. Further, these methods may fail to work if the Software is loaded from a remote computer as is the case for Java applets or the Software takes a different form when stored in the main memory of the computer than when stored on disk.